package io.netty.example.fep.netty.common;

/**
 * Description：
 * 前置机通讯协议
 *
 * @author : chenjie03@imdada.cn
 * Date: 2020/5/26
 * Time: 13:50
 */
public class FepProtocolMsg {

    /**
     * 自定义协议-默认配置
     */
    public static class Constants {
        /**
         * 帧最大长度
         */
        public static final int MAX_FRAME_LENGTH = 1024 * 1024;
        /**
         * 帧中长度字段所占的字节数
         */
        public static final int LENGTH_FIELD_LENGTH = 4;
        /**
         * 帧中长度偏移
         */
        public static final int LENGTH_FIELD_OFFSET = 1;
        public static final int LENGTH_ADJUSTMENT = 0;
        public static final int INITIAL_BYTES_TO_STRIP = 0;

        /**
         * 二进制从 00000000 到01111111到10000000到 11111111
         * 十进制从  -128 到 -1 到 0 到 127
         * 消息类型编号
         * 其他业务
         */
        public static final byte TYPE_OTHER = 0;

        /**
         * 心跳包
         */
        public static final byte TYPE_HEART_BEAT = 1;


        /**
         * 失去连接，主动发送失连
         */
        public static final byte TYPE_LOST = -1;

        /**
         * 远程查询
         */
        public static final byte TYPE_QUERY = 2;

        /**
         * 远程日志
         */
        public static final byte TYPE_LOG = 3;

        /**
         * 报警
         */
        public static final byte TYPE_ALARM = 4;

        /**
         * 运行监控
         */
        public static final byte TYPE_MONITOR = 5;


    }


    /**
     * 二进制从 00000000 到01111111到10000000到 11111111
     * 十进制从  -128 到 -1 到 0 到 127
     * 消息类型编号
     */
    private byte type;
    /**
     * 内容长度
     */
    private int length;
    /**
     * 内容
     */
    private String body;

    public FepProtocolMsg(byte type, String body) {
        this.type = type;
        this.length = body.length();
        this.body = body;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("FepProtocolMsg{");
        sb.append("type=").append(type);
        sb.append(", length=").append(length);
        sb.append(", body='").append(body).append('\'');
        sb.append('}');
        return sb.toString();
    }

    /**
     * 获取 type
     *
     * @return type
     */
    public byte getType() {
        return type;
    }

    /**
     * 设置 type
     * 你可以通过 getType() 方法去访问 type 的值
     *
     * @param type type
     */
    public FepProtocolMsg setType(byte type) {
        this.type = type;
        return this;
    }

    /**
     * 获取 length
     *
     * @return length
     */
    public int getLength() {
        return length;
    }

    /**
     * 设置 length
     * 你可以通过 getLength() 方法去访问 length 的值
     *
     * @param length length
     */
    public FepProtocolMsg setLength(int length) {
        this.length = length;
        return this;
    }

    /**
     * 获取 body
     *
     * @return body
     */
    public String getBody() {
        return body;
    }

    /**
     * 设置 body
     * 你可以通过 getBody() 方法去访问 body 的值
     *
     * @param body body
     */
    public FepProtocolMsg setBody(String body) {
        this.body = body == null ? null : body.trim();
        return this;
    }
}
